/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.viajaconmigo.service.impl;

import com.viajaconmigo.error.EmailUsuarioYaExisteException;
import com.viajaconmigo.error.NickUsuarioYaExisteException;
import com.viajaconmigo.error.UsuarioNoExisteException;
import com.viajaconmigo.error.ViajesException;
import com.viajaconmigo.model.Sesion;
import com.viajaconmigo.model.Usuario;
import com.viajaconmigo.repository.PaisDAO;
import com.viajaconmigo.repository.SesionDAO;
import com.viajaconmigo.repository.UsuarioDAO;
import com.viajaconmigo.service.UsuarioService;
import java.util.Calendar;
import java.util.Date;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author Pablo
 */
@Named
@Transactional(rollbackFor = ViajesException.class)    
public class UsuarioServiceImpl implements UsuarioService {

    @Inject
    UsuarioDAO usuarioDAO;
    
    @Inject
    SesionDAO sesionDAO;
    
    @Inject
    PaisDAO paisDAO;

    @Override    
    public Usuario abrirSesion(String nick, String password) throws UsuarioNoExisteException {
        Usuario usuario = usuarioDAO.buscarNickPW(nick, password);
        if (usuario == null){
            throw new UsuarioNoExisteException();
        }
        else{
            //Registrar sesion
            Sesion sesion = new Sesion();
            sesion.setNick(usuario);
            sesion.setFechaHora(Calendar.getInstance().getTime());
            sesionDAO.crear(sesion);
            return usuario;
        }
    }
  
    @Override    
    public Usuario creaUsuario(String nick, String password, String nombre, 
            String email, Date fecha_nac, Integer nacionalidad, String sexo) throws NickUsuarioYaExisteException, EmailUsuarioYaExisteException{
        Usuario usuario = usuarioDAO.getUsuarioByNickOrEmail(nick, email);
        if (usuario == null){
            usuario = new Usuario();
            usuario.setNick(nick);
            usuario.setPassword(password);
            usuario.setEmail(email);
            //usuario.setProvincia(usuarioDAO.getProvincia(provincia));            
            if(!nombre.equals(""))
                usuario.setNombre(nombre);
            usuario.setFechaAlta(Calendar.getInstance().getTime());
            if(fecha_nac != null)
                usuario.setFechaNacimiento(fecha_nac);            
            if(nacionalidad!=null){
                usuario.setNacionalidad(paisDAO.buscarPorId(nacionalidad));
                //usuario.setNacionalidad(paisDAO.getPaisName(nacionalidad));
            }    
            usuario.setSexo(sexo);
            return usuarioDAO.crear(usuario);
        }
        else{
            if (usuario.getNick().equals(nick))
                throw new NickUsuarioYaExisteException();
            else
                throw new EmailUsuarioYaExisteException();
        }
    }

}
